package com.yang.api.filter.impl;

import com.yang.api.client.BeaconCacheClient;
import com.yang.api.filter.CheckFilter;
import com.yang.common.constant.CacheConstant;
import com.yang.common.enums.ExceptionEnums;
import com.yang.common.exception.ApiException;
import com.yang.common.model.StandardSubmit;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 校验请求的ip地址是否是白名单
 */
@Service(value = "ip")
@Slf4j
public class IPCheckFilter implements CheckFilter {
    @Autowired
    private BeaconCacheClient cacheClient;

    private final String IP_ADDRESS = "ipAddress";

    @Override
    public void check(StandardSubmit submit) {
        log.info("【接口模块-校验ip】   校验ing…………");
        List<String> ip = (List<String>)cacheClient.hget(CacheConstant.CLIENT_BUSINESS + submit.getApikey(), IP_ADDRESS);
        submit.setIp(ip);

        //如果IP白名单为null,直接放行,或者包含。
        //如果客户未设置IP白名单,认为客户什么ip都可以访问
        //如果设置了IP白名单,才需要去做一个校验
        if (CollectionUtils.isEmpty(ip) || ip.contains(submit.getRealIP())) {
            log.info("【接口模块-校验ip】  客户端请求IP合法！");
            return;
        }

        log.info("【接口模块-校验ip】  请求的ip不在白名单内");
        throw new ApiException(ExceptionEnums.IP_NOT_WHITE);
    }
}
